/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import bean.Autor;
import bean.AvaliacaoMEC;
import bean.Coordenacao;
import bean.Curso;
import bean.EgressosCurso;
import bean.Imagem;
import bean.Instituicao;
import bean.PDF;
import bean.PPP;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.Serializable;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;

/**
 *
 * @author fernando
 */
public class CursoDAO implements Serializable {

    public CursoDAO() {
        conexao = new ConexaoPostgres();
    }

    public boolean cadastrarCurso(Curso curso) {
        boolean resultado = false;
        try {
            if (validarCadastroCurso(curso)) {


                ps = conexao.getConnection().prepareStatement("INSERT INTO curso(nome, id_instituicao, tipologia, site, quantidade_doutores, quantidade_mestres, quantidade_especialistas, quantidade_graduados, periodicidade_oferta, tipologia_atual, ano_inicio, duracao_curso, numero_vagas )  VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?) ");
                ps.setString(1, curso.getNome());
                ps.setInt(2, curso.getInstituicao().getId());
                ps.setString(3, curso.getTipologia());
                ps.setString(4, curso.getSite());
                ps.setInt(5, curso.getQuantidadeDoutores());
                ps.setInt(6, curso.getQuantidadeMestres());
                ps.setInt(7, curso.getQuantidadeEspecialistas());
                ps.setInt(8, curso.getQuantidadeGraduados());
                ps.setString(9, curso.getPeriodicidadeOferta());
                ps.setString(10, curso.getTipologia());
                ps.setInt(11, curso.getAnoInicioCurso());
                ps.setInt(12, curso.getDuracaoDoCurso());
                ps.setInt(13, curso.getNumeroDeVagas());
                ps.executeUpdate();
                conexao.closeConnection();
                curso.setId(this.buscarIdCurso(curso));

                Iterator i;

                if (!curso.getEngressosCursos().isEmpty()) {
                    i = curso.getEngressosCursos().iterator();

                    while (i.hasNext()) {
                        EgressosCurso e = (EgressosCurso) i.next();

                        ps = conexao.getConnection().prepareStatement("INSERT INTO curso_ingressos_egressos(id_curso, ingressos, egressos, duracao, periodo) VALUES (?, ?, ?, ?, ?)");
                        ps.setInt(1, curso.getId());
                        ps.setInt(2, e.getIngressos());
                        ps.setInt(3, e.getEgressos());
                        ps.setInt(4, e.getDuracao());
                        ps.setString(5, e.getPeriodo());
                        ps.executeUpdate();
                        conexao.closeConnection();
                    }
                }

                if (!curso.getAvaliacoesMEC().isEmpty()) {


                    i = curso.getAvaliacoesMEC().iterator();

                    while (i.hasNext()) {
                        new AvaliacaoDAO().cadastrarAvaliacao((AvaliacaoMEC) i.next(), curso.getId());
                    }
                }

                if (!curso.getProfessores().isEmpty()) {
                    i = curso.getProfessores().iterator();

                    while (i.hasNext()) {
                        ps = conexao.getConnection().prepareStatement("INSERT INTO curso_professor (id_curso, id_professor) VALUES (?, ?) ");

                        Autor a = (Autor) i.next();
                        ps.setInt(1, curso.getId());
                        ps.setInt(2, a.getId());
                        ps.executeUpdate();
                        conexao.closeConnection();

                    }
                }

                if (!curso.getCoordenacoes().isEmpty()) {
                    i = curso.getCoordenacoes().iterator();

                    while (i.hasNext()) {
                        ps = conexao.getConnection().prepareStatement("INSERT INTO curso_coordenacao (id_curso, id_coordenador, data_inicio, data_fim, experiencia) VALUES (?, ?, ?, ?, ?)");

                        Coordenacao c = (Coordenacao) i.next();
                        ps.setInt(1, curso.getId());
                        ps.setInt(2, c.getCoordenador().getId());
                        Date data = new Date(c.getDataInicio().getTime());
                        ps.setDate(3, data);
                        data = new Date(c.getDataFim().getTime());
                        ps.setDate(4, data);
                        ps.setString(5, c.getExperiencia());
                        ps.executeUpdate();
                        conexao.closeConnection();
                    }
                }

                if (!curso.getPpps().isEmpty()) {
                    i = curso.getPpps().iterator();
                    ImagemDao imDao = new ImagemDao();
                    PPPDao pppD = new PPPDao();
                    while (i.hasNext()) {
                        PPP p = (PPP) i.next();

                        pppD.cadastrarPPP(p, curso.getId());


                    }
                }
                resultado = true;
            }

        } catch (SQLException ex) {
            Logger.getLogger(CursoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }



        return resultado;
    }

    public boolean validarCadastroCurso(Curso curso) {
        boolean retorno = false;
        try {
            ps = conexao.getConnection().prepareStatement("SELECT id FROM curso WHERE nome = ? AND id_instituicao = ? AND tipologia = ?");
            ps.setString(1, curso.getNome());
            ps.setInt(2, curso.getInstituicao().getId());
            ps.setString(3, curso.getTipologia());
            ResultSet rs = ps.executeQuery();
            conexao.closeConnection();
            if (rs.next()) {
                return retorno;
            } else {
                retorno = true;
            }
        } catch (SQLException ex) {
            Logger.getLogger(CursoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }

        return retorno;
    }

    public int buscarIdCurso(Curso curso) {
        int id = -1;
        try {
            ps = conexao.getConnection().prepareStatement("SELECT id FROM curso WHERE nome = ? AND id_instituicao = ? AND tipologia = ?");
            ps.setString(1, curso.getNome());
            ps.setInt(2, curso.getInstituicao().getId());
            ps.setString(3, curso.getTipologia());
            ResultSet rs = ps.executeQuery();
            conexao.closeConnection();
            while (rs.next()) {
                return rs.getInt("id");
            }
        } catch (SQLException ex) {
            Logger.getLogger(CursoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }

        return id;

    }

    public Curso buscarCurso(int id) {
        Curso curso = new Curso();
        try {
            ps = conexao.getConnection().prepareStatement("SELECT nome, id_instituicao, tipologia, site, quantidade_doutores, quantidade_mestres, quantidade_especialistas, quantidade_graduados, periodicidade_oferta, tipologia_atual, ano_inicio, duracao_curso, numero_vagas  FROM curso WHERE id = ? ");
            ps.setInt(1, id);
            ResultSet rs = ps.executeQuery();
            conexao.closeConnection();
            if (rs.next()) {
                curso.setId(id);
                curso.setNome(rs.getString("nome"));
                curso.setInstituicao(new InstituicaoDao().consultaInstituicao(rs.getInt("id_instituicao")));
                curso.setTipologia(rs.getString("tipologia"));
                curso.setSite(rs.getString("site"));
                curso.setQuantidadeDoutores(rs.getInt("quantidade_doutores"));
                curso.setQuantidadeMestres(rs.getInt("quantidade_mestres"));
                curso.setQuantidadeEspecialistas(rs.getInt("quantidade_especialistas"));
                curso.setQuantidadeGraduados(rs.getInt("quantidade_graduados"));
                curso.setPeriodicidadeOferta(rs.getString("periodicidade_oferta"));
                curso.setTipologia(rs.getString("tipologia_atual"));
                curso.setAnoInicioCurso(rs.getInt("ano_inicio"));
                curso.setDuracaoDoCurso(rs.getInt("duracao_curso"));
                curso.setNumeroDeVagas(rs.getInt("numero_vagas"));
            }
            curso.setEngressosCursos(this.buscarMapeamentoOferta(curso.getId()));
            curso.setpPPs(new PPPDao().buscarPPPsCurso(curso.getId()));
            curso.setCoordenacoes(this.buscarCoodenacoesCurso(curso.getId()));
            curso.setAvaliacoesMEC(new AvaliacaoDAO().buscarAvaliacoesCurso(id));
            curso.setProfessores(this.buscarProfessoresCurso(curso.getId()));


        } catch (SQLException ex) {
            Logger.getLogger(CursoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }

        return curso;
    }
    
    public Curso buscarCursoSimplificado(int id) {
        Curso curso = new Curso();
        try {
            ps = conexao.getConnection().prepareStatement("SELECT nome, id_instituicao, tipologia  FROM curso WHERE id = ? ");
            ps.setInt(1, id);
            ResultSet rs = ps.executeQuery();
            conexao.closeConnection();
            if (rs.next()) {
                curso.setId(id);
                curso.setNome(rs.getString("nome"));
                curso.setInstituicao(new InstituicaoDao().consultaInstituicao(rs.getInt("id_instituicao")));
                curso.setTipologia(rs.getString("tipologia"));
                
            }
           


        } catch (SQLException ex) {
            Logger.getLogger(CursoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }

        return curso;
    }

    public List<EgressosCurso> buscarMapeamentoOferta(int idCurso) {
        List<EgressosCurso> ec = new ArrayList<EgressosCurso>();
        try {
            System.out.println("Id curso: " + idCurso);
            ps = conexao.getConnection().prepareStatement("SELECT * FROM curso_ingressos_egressos WHERE id_curso = ? ");
            ps.setInt(1, idCurso);
            ResultSet rs = ps.executeQuery();
            conexao.closeConnection();
            while (rs.next()) {
                EgressosCurso e = new EgressosCurso();
                e.setPeriodo(rs.getString("periodo"));
                e.setDuracao(rs.getInt("duracao"));
                e.setEgressos(rs.getInt("egressos"));
                e.setIngressos(rs.getInt("ingressos"));
                ec.add(e);

            }
        } catch (SQLException ex) {
            Logger.getLogger(CursoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return ec;
    }

    public StreamedContent buscarImagemMatrizCurricular(int id) {
        StreamedContent imagem = new DefaultStreamedContent();
        try {
            ps = conexao.getConnection().prepareStatement("SELECT matriz_curricular FROM ppp WHERE id = ? ");
            ps.setInt(1, id);
            ResultSet rs = ps.executeQuery();
            conexao.closeConnection();
            if (rs.next()) {
                BufferedImage img = ImageIO.read(new ByteArrayInputStream(rs.getBytes("matriz_curricular")));
                ByteArrayOutputStream os = new ByteArrayOutputStream();
                ImageIO.write(img, "jpeg", os);
                File file = new File("imagem");
                imagem = new DefaultStreamedContent(new ByteArrayInputStream(os.toByteArray()), "image/png");

            }
        } catch (SQLException ex) {
            Logger.getLogger(CursoDAO.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(CursoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }

        return imagem;
    }

    public List<Autor> buscarProfessoresCurso(int idCurso) {
        List<Autor> professores = new ArrayList<Autor>();
        try {
            ps = conexao.getConnection().prepareStatement("SELECT id_professor FROM curso_professor WHERE id_curso = ? ");
            ps.setInt(1, idCurso);
            ResultSet rs = ps.executeQuery();
            AutorDao ad = new AutorDao();
            while (rs.next()) {
                Autor professor = ad.consultaAutor(rs.getInt("id_professor"));
                professores.add(professor);
            }

        } catch (SQLException ex) {
            Logger.getLogger(CursoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }


        return professores;
    }

    public List<Coordenacao> buscarCoodenacoesCurso(int idCurso) {
        ArrayList<Coordenacao> coordenacoes = new ArrayList<Coordenacao>();
        try {
            ps = conexao.getConnection().prepareStatement("SELECT id, id_coordenador, data_inicio, data_fim, experiencia FROM curso_coordenacao WHERE id_curso = ? ");
            ps.setInt(1, idCurso);
            ResultSet rs = ps.executeQuery();
            conexao.closeConnection();
            while (rs.next()) {
                Coordenacao c = new Coordenacao();
                c.setId(rs.getInt("id"));
                c.setCoordenador(new AutorDao().consultaAutor(rs.getInt("id_coordenador")));
                c.setDataFim(rs.getDate("data_fim"));
                c.setDataInicio(rs.getDate("data_inicio"));
                c.setExperiencia(rs.getString("experiencia"));
                coordenacoes.add(c);
            }

        } catch (SQLException ex) {
            Logger.getLogger(CursoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return coordenacoes;
    }

    public List<Curso> pesquisar(String tipologia, String uf) {
        List<Curso> cursos = new ArrayList<Curso>();
        try {
            System.out.println("Fui Executado: Curso Dao  - pesquisar");
          

         
            ps = conexao.getConnection().prepareStatement("SELECT curso.id, curso.nome, id_instituicao, tipologia FROM curso, instituicao WHERE curso.tipologia ILIKE ? AND instituicao.estado ILIKE ? AND instituicao.id = curso.id_instituicao; ");
            if (tipologia.isEmpty()) {
                ps.setString(1, "%");
            }else{
                ps.setString(1, tipologia);  
            }
            
            if(uf.isEmpty()){
                ps.setString(2, "%");
            }else{
                ps.setString(2, uf);
            }
                  
            ResultSet rs = ps.executeQuery();
            conexao.closeConnection();
            Curso curso = new Curso();
            Instituicao inst = new Instituicao();
            InstituicaoDao instDao = new InstituicaoDao();
            Iterator i;

            while (rs.next()) {
                curso.setId(rs.getInt("id"));
                curso.setNome(rs.getString("nome"));
                curso.setTipologia(rs.getString("tipologia"));

                inst = instDao.consultaInstituicao(rs.getInt("id_instituicao"));
                curso.setInstituicao(inst);



                cursos.add(curso);

                curso = new Curso();
                inst = new Instituicao();


            }


        } catch (SQLException ex) {
            this.conexao.closeConnection();
            Logger.getLogger(InstituicaoDao.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            this.conexao.closeConnection();
        }
        return cursos;



    }

    public List<Curso> listarCursos() {


        List<Curso> cursos = new ArrayList<Curso>();
        try {
            System.out.println("Fui Executado: Curso Dao  - listarCursos");
            ps = conexao.getConnection().prepareStatement("SELECT id, nome, id_instituicao, tipologia FROM curso ");
            ResultSet rs = ps.executeQuery();
            conexao.closeConnection();
            Curso curso = new Curso();
            Instituicao inst = new Instituicao();
            InstituicaoDao instDao = new InstituicaoDao();
            Iterator i;

            while (rs.next()) {
                curso.setId(rs.getInt("id"));
                curso.setNome(rs.getString("nome"));
                curso.setTipologia(rs.getString("tipologia"));

                inst = instDao.consultaInstituicao(rs.getInt("id_instituicao"));
                curso.setInstituicao(inst);



                cursos.add(curso);

                curso = new Curso();
                inst = new Instituicao();


            }


        } catch (SQLException ex) {
            this.conexao.closeConnection();
            Logger.getLogger(InstituicaoDao.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            this.conexao.closeConnection();
        }
        return cursos;


    }

    public boolean alterarNotas(Curso curso) {
        boolean resultado = false;
        try {
            ps = conexao.getConnection().prepareStatement("DELETE FROM curso_avaliacao WHERE id_curso = ?");
            ps.setInt(1, curso.getId());
            ps.executeUpdate();

            Iterator i;

            if (!curso.getAvaliacoesMEC().isEmpty()) {


                i = curso.getAvaliacoesMEC().iterator();

                while (i.hasNext()) {
                    ps = conexao.getConnection().prepareStatement("INSERT INTO curso_avaliacao(id_curso, nota, ano_inicio, ano_fim) VALUES (?, ?, ?, ?)  ");

                    ps.setInt(1, curso.getId());
                    AvaliacaoMEC a = (AvaliacaoMEC) i.next();
                    ps.setInt(2, a.getNota());
                    ps.setInt(3, a.getAnoInicio());
                    ps.setInt(4, a.getAnoFim());
                    ps.executeUpdate();
                    conexao.closeConnection();



                }

            }
            resultado = true;

        } catch (SQLException ex) {
            Logger.getLogger(CursoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }


        return resultado;
    }

    public boolean alterarCoordenacoes(Curso curso) {
        boolean resultado = false;
        try {
            ps = conexao.getConnection().prepareStatement("DELETE FROM curso_coordenacao WHERE id_curso = ? ");
            ps.setInt(1, curso.getId());
            ps.executeUpdate();
            conexao.closeConnection();
            Iterator i;
            if (!curso.getCoordenacoes().isEmpty()) {
                i = curso.getCoordenacoes().iterator();

                while (i.hasNext()) {
                    ps = conexao.getConnection().prepareStatement("INSERT INTO curso_coordenacao (id_curso, id_coordenador, data_inicio, data_fim, experiencia) VALUES (?, ?, ?, ?, ?)");

                    Coordenacao c = (Coordenacao) i.next();
                    ps.setInt(1, curso.getId());
                    ps.setInt(2, c.getCoordenador().getId());
                    Date data = new Date(c.getDataInicio().getTime());
                    ps.setDate(3, data);
                    data = new Date(c.getDataFim().getTime());
                    ps.setDate(4, data);
                    ps.setString(5, c.getExperiencia());
                    ps.executeUpdate();
                    conexao.closeConnection();
                }
            }
            resultado = true;



        } catch (SQLException ex) {
            Logger.getLogger(CursoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }


        return resultado;

    }

    public boolean alterarInformacoesBasicas(Curso curso) {
        boolean resultado = false;

        try {
            ps = conexao.getConnection().prepareStatement("UPDATE curso SET nome = ?, id_instituicao = ?, tipologia = ?, site = ?, quantidade_doutores = ?, quantidade_mestres = ?, quantidade_especialistas = ?, quantidade_graduados = ?, periodicidade_oferta = ?, tipologia_atual = ?, ano_inicio = ?, duracao_curso = ?, numero_vagas = ? WHERE id = ? ");
            ps.setString(1, curso.getNome());
            ps.setInt(2, curso.getInstituicao().getId());
            ps.setString(3, curso.getTipologia());
            ps.setString(4, curso.getSite());
            ps.setInt(5, curso.getQuantidadeDoutores());
            ps.setInt(6, curso.getQuantidadeMestres());
            ps.setInt(7, curso.getQuantidadeEspecialistas());
            ps.setInt(8, curso.getQuantidadeGraduados());

            ps.setString(9, curso.getPeriodicidadeOferta());
            ps.setString(10, curso.getTipologia());
            ps.setInt(11, curso.getAnoInicioCurso());
            ps.setInt(12, curso.getDuracaoDoCurso());
            ps.setInt(13, curso.getNumeroDeVagas());
            ps.setInt(14, curso.getId());
            ps.executeUpdate();
            conexao.closeConnection();

            ps = conexao.getConnection().prepareStatement("DELETE FROM curso_ingressos_egressos WHERE id_curso = ? ");
            ps.setInt(1, curso.getId());
            ps.executeUpdate();
            conexao.closeConnection();

            Iterator i;

            if (!curso.getEngressosCursos().isEmpty()) {
                i = curso.getEngressosCursos().iterator();

                while (i.hasNext()) {
                    EgressosCurso e = (EgressosCurso) i.next();
                    ps = conexao.getConnection().prepareStatement("INSERT INTO curso_ingressos_egressos(id_curso, ingressos, egressos, duracao, periodo) values (?, ?, ?, ?, ?)");
                    ps.setInt(1, curso.getId());
                    ps.setInt(2, e.getIngressos());
                    ps.setInt(3, e.getEgressos());
                    ps.setInt(4, e.getDuracao());
                    ps.setString(5, e.getPeriodo());
                    ps.executeUpdate();
                    conexao.closeConnection();
                }
            }



            resultado = true;
        } catch (SQLException ex) {
            Logger.getLogger(CursoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }

        return resultado;
    }

    public boolean alterarDocentes(Curso curso) {
        boolean resultado = false;

        Iterator i;
        try {

            ps = conexao.getConnection().prepareStatement("DELETE FROM curso_professor WHERE id_curso = ?");
            ps.setInt(1, curso.getId());
            ps.executeUpdate();
            conexao.closeConnection();
            if (!curso.getProfessores().isEmpty()) {
                i = curso.getProfessores().iterator();

                while (i.hasNext()) {

                    ps = conexao.getConnection().prepareStatement("INSERT INTO curso_professor (id_curso, id_professor) VALUES (?, ?) ");
                    Autor a = (Autor) i.next();
                    ps.setInt(1, curso.getId());
                    ps.setInt(2, a.getId());
                    ps.executeUpdate();
                    conexao.closeConnection();




                }
            }

        } catch (SQLException ex) {
            Logger.getLogger(CursoDAO.class.getName()).log(Level.SEVERE, null, ex);
            return resultado;
        }

        resultado = true;

        return resultado;
    }

    public boolean alterarPPP(PPP ppp) {
        boolean retorno = false;

        retorno = new PPPDao().alterarPPP(ppp);


        return retorno;


    }

    public boolean alterarPPPs(Curso curso) {
        boolean retorno = false;
        Iterator i;

        if (!curso.getPpps().isEmpty()) {
            i = curso.getPpps().iterator();

            while (i.hasNext()) {
                PPP p = (PPP) i.next();
                System.out.println("Id do ppp:" + p.getId());

                if (p.getId() < 1) {
                    new PPPDao().cadastrarPPP(p, curso.getId());

                } else {
                    new PPPDao().alterarPPP(p);
                }


            }
        }

        retorno = true;


        return retorno;
    }

    public boolean alterarMatrizPPP(PPP ppp) {
        boolean retorno = false;
        try {
            ImagemDao imDao = new ImagemDao();
            PPP remImg = new PPPDao().buscarPPP(ppp.getId());
            if (remImg.getMatrizCurricular().getId() > 0) {
                new ImagemDao().removerImagem(remImg.getMatrizCurricular().getId());
            }

            ps = conexao.getConnection().prepareStatement("UPDATE ppp SET matriz_curricular = ? WHERE id = ? ");
            int idMatrizCurricular = imDao.cadastrarImagem(ppp.getMatrizCurricular());
            ps.setInt(1, idMatrizCurricular);
            ps.setInt(2, ppp.getId());
            ps.executeUpdate();
            conexao.closeConnection();
            retorno = true;

        } catch (SQLException ex) {
            Logger.getLogger(CursoDAO.class.getName()).log(Level.SEVERE, null, ex);
            return retorno;
        }
        return retorno;
    }

    public boolean alterarPdfPPP(PPP ppp) {
        boolean retorno = false;
        try {
            PDFDao pdfDao = new PDFDao();
            PPP pppRemocao = new PPPDao().buscarPPP(ppp.getId());
            if (pppRemocao.getPdf().getId() > 0) {
                pdfDao.removerPDF(pppRemocao.getPdf().getId());
            }
            ps = conexao.getConnection().prepareStatement("UPDATE ppp SET pdf = ? WHERE id = ? ");
            int idPdf = pdfDao.cadastrarPDF(ppp.getPdf());
            ps.setInt(1, idPdf);
            ps.setInt(2, ppp.getId());
            ps.executeUpdate();
            conexao.closeConnection();
            retorno = true;

        } catch (SQLException ex) {
            Logger.getLogger(CursoDAO.class.getName()).log(Level.SEVERE, null, ex);
            return retorno;
        }
        return retorno;
    }

    public boolean alterarPDFPPP(PPP ppp) {
        boolean retorno = false;
        try {

            ps = conexao.getConnection().prepareStatement("SELECT (pdf) FROM ppp WHERE id = ?");
            ps.setInt(1, ppp.getId());
            ResultSet rs = ps.executeQuery();
            conexao.closeConnection();

            int idPDFAnterior = 0;

            if (rs.next()) {
                idPDFAnterior = rs.getInt("id");
            }


            PDFDao pdfDao = new PDFDao();



            ps = conexao.getConnection().prepareStatement("UPDATE ppp SET pdf = ? WHERE id = ? ");

            ps.setInt(1, pdfDao.cadastrarPDF(ppp.getPdf()));
            ps.setInt(2, ppp.getId());
            ps.executeUpdate();
            conexao.closeConnection();

            if (idPDFAnterior > 0) {
                pdfDao.removerPDF(idPDFAnterior);
            }
            retorno = true;

        } catch (SQLException ex) {
            Logger.getLogger(CursoDAO.class.getName()).log(Level.SEVERE, null, ex);
            return retorno;
        }
        return retorno;
    }

    public Conexao getConexao() {
        return conexao;
    }

    public void setConexao(Conexao conexao) {
        this.conexao = conexao;
    }

    public PreparedStatement getPs() {
        return ps;
    }

    public void setPs(PreparedStatement ps) {
        this.ps = ps;
    }

    public boolean isSucess() {
        return sucess;
    }

    public void setSucess(boolean sucess) {
        this.sucess = sucess;
    }
    private Conexao conexao;
    private PreparedStatement ps;
    private boolean sucess = false;
}
